home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / PNL Libraries / MyRestartFinder.p < prev    next >
Encoding:
Text File  |  1995-01-16  |  1.7 KB  |  74 lines  |  [TEXT/CWIE]

  1. unit MyRestartFinder;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Files;
  7.  
  8.     procedure RestartFinder (tofront, dontwait: boolean);
  9.     procedure QuitFinder;
  10.     procedure GetFinderFS (var fs: FSSpec);
  11.     procedure StartFinder (fs: FSSpec; tofront, dontwait: boolean);
  12.  
  13. implementation
  14.  
  15.     uses
  16.         AppleEvents, MyProcesses, MyFDFlags;
  17.  
  18.     const
  19.         finder_creator = 'MACS';
  20.         finder_type = 'FNDR';
  21.         sharing_creator = 'hhgg';
  22.         sharing_type = 'INIT';
  23.  
  24.     procedure QuitFinder;
  25.     begin
  26.         QuitApplication(sharing_creator, sharing_type);
  27.         QuitApplication(finder_creator, finder_type);
  28.     end;
  29.  
  30.     procedure GetFinderFS (var fs: FSSpec);
  31.         var
  32.             psn: ProcessSerialNumber;
  33.     begin
  34.         if not FindProcess(finder_creator, finder_type, psn, fs) then begin
  35.             fs.name := '';
  36.         end;
  37.     end;
  38.  
  39.     procedure StartFinder (fs: FSSpec; tofront, dontwait: boolean);
  40.         var
  41.             psn, our_psn: ProcessSerialNumber;
  42.             er: EventRecord;
  43.             dummy: boolean;
  44.             same: boolean;
  45.             t: longInt;
  46.     begin
  47.         if GetCurrentProcess(our_psn) = noErr then begin
  48.             if fs.name = '' then begin
  49.                 LaunchApp(finder_creator, finder_type, tofront);
  50.             end
  51.             else begin
  52.                 LaunchFSSpec(fs, tofront);
  53.             end;
  54.             if not dontwait then begin
  55. { Wait until we're not the FrontProcess, else we may ExitToShell before the Finder }
  56. { has fully restarted - which causes system error 41 if we are the only app running. }
  57.                 t := TickCount + 10 * 60;
  58.                 while (GetFrontProcess(psn) = noErr) & (SameProcess(psn, our_psn, same) = noErr) & same & (TickCount < t) do begin
  59.                     dummy := WaitNextEvent(everyEvent, er, 15, nil);
  60.                 end;
  61.             end;
  62.         end;
  63.     end;
  64.  
  65.     procedure RestartFinder (tofront, dontwait: boolean);
  66.         var
  67.             finder_fs: FSSpec;
  68.     begin
  69.         GetFinderFS(finder_fs);
  70.         QuitFinder;
  71.         StartFinder(finder_fs, tofront, dontwait);
  72.     end;
  73.  
  74. end.